package haut.system.member.person;

import haut.data.SystemData;
import haut.system.member.events.SportingEvents;
import haut.util.Time;
import haut.util.exception.DataException;
import haut.util.exception.DuplicationException;

import java.util.Vector;

/**
 * <code>Manager</code>是一个管理员类
 * @author LiangDa Chu
 * @author MingJie Li
 */

/**
 * haut.system.member.person.Manager类是一个管理员类
 * 管理员拥有发布项目，更改项目规则，更改项目项目开设时间，更改项目开设地点等功能
 * @author -LiangDa Chu
 */
final class Manager {

    /**
     * 系统数据
     */
    protected SystemData data = SystemData.getInstance();

    /**
     * 根据项目名称查找并返回对应项目
     * @param name -待查找的项目名称
     * @return -返回对应名称的项目
     * @author -LiangDa Chu
     */
    public SportingEvents checkEventByName(String name) throws DataException {
        Vector<SportingEvents> allEvents = data.getAllEvents();
        for (SportingEvents event : allEvents) {
            if (name.equals(event.getName())) {
                return event;
            }
        }
        throw new DataException("该项目不存在！");
    }

    /**
     * 查阅并输出当前项目
     */
    public void checkEvents() {

        Vector<SportingEvents> allEvents = data.getAllEvents();
        SportingEvents event = null;
        int size = allEvents.size();

        for(int i = 0; i < size; ++i) {
            event = allEvents.get(i);
            System.out.println(event.getName());
        }
    }

    /**
     * 发布新项目，调用haut.data.SystemData类中的addAllEvent方法将新项目添加到项目的vector容器中
     * @param events -新项目
     * @throws DuplicationException -异常类，用于检测检查项目是否重复
     * @author -LiangDa Chu
     */
    public void newEvent(SportingEvents events) throws DuplicationException {
        data.addAllEvent(events);
    }

    /**
     * 更改项目规则
     * @param name -待更改规则的项目名称
     * @author -LiangDa Chu
     */
    public void changeRuleOfEvent(String name, String newRule) throws DataException {
        //获取项目
        SportingEvents event = checkEventByName(name);
        //更改项目规则
        event.setRule(newRule);
        System.out.println("项目（" + name + "）规则更改成功！");

    }

    /**
     * 更改项目开始时间
     * @param name -待更改项目的名称
     * @param newTime -新的项目开始时间
     * @throws DataException -抛异常，用于对checkEventByName方法中name进行数据校验
     * @author -LiangDa Chu
     */
    public void changeTimeOfEvent(String name, Time newTime) throws DataException {
        //获取项目
        SportingEvents event = checkEventByName(name);
        //更改项目开始时间
        event.setTime(newTime);
        System.out.println("项目（" + name + "）开始时间更改成功！");
    }

    /**
     * 更改项目开设地点
     * @param name -待更改项目的名称
     * @param newPlace -项目新的开设地点
     * @throws DataException -抛异常，用于对checkEventByName方法中name进行数据校验
     * @author -LiangDa Chu
     */
    public void changePlaceOfEvent(String name, String newPlace) throws DataException {
        //获取项目
        SportingEvents event = checkEventByName(name);
        //更改项目开始时间
        event.setPlace(newPlace);
        System.out.println("项目（" + name + "）开设地点更改成功！");

    }

}
